package com.ruoyi.system.protocol;


import com.ruoyi.system.domain.DO.RetrievalSearchResult;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public interface IDynamicSolrSearchService {

    /**
     * 通过ID查看文档是否存在
     *
     * @param id    数据ID
     */
    Boolean existsDocument(String id);

    /**
     * 数据添加，指定ID
     *
     * @param object 要增加的数据
     * @param id     数据ID
     * @return
     */
    void createDocument(Object object, String id);

    /**
     * 批量数据添加，指定ID
     *
     * @param objList 要增加的数据
     * @return
     */
    void batchCreateDocument(List<Object> objList);

    /**
     * 通过ID删除数据
     *
     * @param id    数据ID
     */
    void deleteDocument(String id);

    /**
     * 通过ID批量删除数据
     *
     * @param ids    数据ID list
     */
    void deleteDocument(List<String> ids);


    /**
     * 通过ID删除数据
     *
     * @param query    查询条件
     */
    void deleteQueryDocument(String query);

    /**
     * 通过ID 更新数据
     *
     * @param object 要增加的数据
     * @param id     数据ID
     * @return
     */
    void updateDocument(Object object, String id);

    /**
     * 通过ID获取数据
     *
     * @param id    数据ID
     * @return
     */
    Map<String, Object> queryDocument(String id);


    /**
     * 使用分词查询,并分页
     *
     * @param startPage              当前页
     * @param pageSize               每页显示条数
     * @param query                  查询条件
     * @param filterQuery            过滤条件
     * @param showFields             需要显示的字段
     * @param sortRules              排序字段 map 或 string
     * @param setHighlightFields     高亮字段
     * @return
     */
    HashMap<String, Object> search(String query, String[] filterQuery, String[] showFields, Object sortRules, String[] setHighlightFields, int startPage, int pageSize);


    /**
     * 查询分面
     * @param query                  查询条件
     * @param filterQuery            过滤条件
     * @param fields                 需要分面字段
     * @param pageSize               分面取多少条
     * @return
     */
    LinkedHashMap<String, LinkedHashMap<String, Object>> facet(String query, String[] filterQuery, String[] fields, int pageSize);

    /**
     * 使用查询数据个数
     *
     * @param query                  查询条件
     * @param filterQuery            过滤条件
     * @return
     */
    Long searchCount(String query, String[] filterQuery);

    /**
     * 查询数据和总条数
     *
     * @param startPage              当前页
     * @param pageSize               每页显示条数
     * @param query                  查询条件
     * @param filterQuery            过滤条件
     * @param fields                 需要显示的字段，逗号分隔（缺省为全部字段）
     * @param sortRules              排序字段 map 或 string
     * @param setHighlightFields     高亮字段
     * @return
     */
    RetrievalSearchResult list(String query, String[] filterQuery, String[] fields, Object sortRules, String[] setHighlightFields, int startPage, int pageSize);

}
